import {fileURLToPath, URL} from 'node:url'

import {defineConfig, loadEnv} from 'vite'
import vue from '@vitejs/plugin-vue'
import {createSvgIconsPlugin} from 'vite-plugin-svg-icons';
import {resolve} from "path";
import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'
import {ElementPlusResolver} from 'unplugin-vue-components/resolvers'

export default defineConfig(({mode}) => {
    const config = loadEnv(mode, process.cwd())
    return {
        cache: false,
        base: "./",
        plugins: [
            vue(),
            createSvgIconsPlugin({
                // 配置你存放 svg 图标的目录
                iconDirs: [resolve(process.cwd(), 'src/assets/svg')],//例如：src/assets/svg
                // 定义 symbolId 格式
                symbolId: 'icon-[dir]-[name]',
            }),
            // 自动导入 Element Plus 相关函数，例如：ElMessage, ElMessageBox... (带样式)
            AutoImport({
                resolvers: [ElementPlusResolver()],
            }),
            Components({
                resolvers: [ElementPlusResolver()],
            })
        ],

        build: {
            outDir: "dist",
            // 9月更新
            assetsDir: "assets", //指定静态资源存放路径
            sourcemap: false, //是否构建source map 文件
            // 10月更新
            minify: "terser", // 混淆器，terser 构建后文件体积更小，'terser' | 'esbuild'
            chunkSizeWarningLimit: 1500, //chunk 大小警告的限制，默认500KB
            rollupOptions: {
                output: {
                    // 最小化拆分包
                    manualChunks(id) {
                        if (id.includes('node_modules')) {
                            return id.toString().split('node_modules/')[1].split('/')[0].toString();
                        }
                    },
                    chunkFileNames: 'js/[name].[hash].js', // 用于命名代码拆分时创建的共享块的输出命名，[name]表示文件名,[hash]表示该文件内容hash值
                }
            },
            terserOptions: {
                // 生产环境移除console
                compress: {
                    drop_console: true,
                    drop_debugger: true,
                },
                // 10月更新
                output: {
                    comments: true, // 去掉注释内容
                },
            },
        },

        resolve: {
            alias: {
                '@': fileURLToPath(new URL('./src', import.meta.url))
            }
        },
        //配置全局scss变量
        css: {
            preprocessorOptions: {
                scss: {
                    javascriptEnabled: true,
                    additionalData: '@import "@/style/variable.scss";',
                },
            },
        },
        // //配置代理跨域

        server: {
            host: '0.0.0.0',
            port: 520,

            proxy: {
                //配置请求前缀
                [config.VITE_APP_BASE_API]: {
                    //配置请求地址
                    target: config.VITE_APP_SERVE,
                    //是否配置代理跨域
                    changeOrigin: true,
                }
            }

        }


    }
})

